<?php
namespace Home\Controller;

class BaseController extends \Think\Controller
{
	//保存登录用户信息id和user_token
	protected $user = array();
	
	/**
	 * 控制器初始化方法，子类需重写该方法
	 */
	protected function _initialize() 
	{
		$this->user = $this->isLogin();
	}
	
	/**
	 * 判断用户是否登录
	 * @author 刘新
	 */
	public function isLogin($isReturn = false)
	{
		//测试代码
		//$this->ajaxReturn(array('error' => 1, 'info' =>CONTROLLER_NAME));
		
		//判断是否忽略列表
		$ignore = global_config('ignore_check_login');
		if($ignore) {
			$ignore = split(',', $ignore);
			if(in_array(API_CODE, $ignore)) return true;
		}
		
		$result = array('error' => 1, 'info' =>false);
		$param = I('params');
		
		//判断是否传入user_token
		$userToken = $param['userToken'];
		if(!preg_match('/^\w{32,64}$/', $userToken)) {
			$result['info'] = '请传入user_token';
		} else {
			//查询库
			$ut = $this->returnOne('UserToken', array('user_token' => $userToken),'expire_time desc','user_id,user_token,expire_time,mobile');
			if(!$ut) $result['info'] = '请先注册，如果已有账号请先登录';
			
			//如果user_token过期，则提示登录
			if($ut['expire_time'] <= time()) {
				$result['error'] = 2;
				$result['info'] = '请先登录';
			}
		}
		
		//如果已登录则直接返回，否则输出到客户端
		if($result['info'] === false) return array('userId'=>$ut['user_id'], 'userToken'=>$ut['user_token'], 'mobile' => $ut['mobile']);
		$this->ajaxReturn($result);
	}
	
	/**
	 * 查询信息
	 * @param string $model 模型名称
	 * @param array $where 查询条件
	 * @param string $order 排序规则
	 * @param string $field 返回字段信息
	 * @author 刘新
	 * @return array|boolean 返回查询结果
	 */
	protected function returnList ($model,$where=array(),$order='',$field=true, $option = array())
	{
		//获取模型
		$model = $this->getModel($model);
		
		//构造查询条件
		if(!$where) $where = array('status' => 1);
		if(empty($where['status']) && $where['status'] !== 0 && $where['status'] !== '0') $where['status'] = 1;
		
		//查询
		$model->where($where)->order($order)->field($field);
		
		//分页查询
		if($option['page'] && $option['size']) $model->page($option['page'], $option['size']);
		
		//分组
		if($option['group']) $model->group($option['group']);
		
		//查询多少条记录
		if($option['limit']) $model->limit($option['limit']);
		
		//测试代码
		//$model->fetchSql(true);
		
		return $model->select();
	}
	
	/**
	 * 查询信息
	 * @param string $model 模型名称
	 * @param array $where 查询条件
	 * @param string $order 排序规则
	 * @param string $field 返回字段信息
	 * @author 刘新
	 * @return array|boolean 返回查询结果
	 */
	protected function returnOne ($model,$where=array(),$order='',$field=true)
	{
		//获取模型
		$model = $this->getModel($model);
		
		//构造查询条件
		if(!$where) $where = array('status' => 1);
		if(empty($where['status']) && $where['status'] !== 0 && $where['status'] !== '0') $where['status'] = 1;
		
		//查询并返回结果
		return $model->where($where)->order($order)->field($field)->find();
	}
	
	/**
	 * 获取模型对象
	 * @param string|object $model
	 * @author 刘新
	 */	
	protected function getModel($model)
	{
		if(!$model) return M();
		if(is_string($model)) return M($model);
		if(!is_object($model)) return false;
		return $model;
	}
	
	/**
	 * 错误日志
	 * @param string $file 发生错误的文件
	 * @param string|int $line 错误日志发生的等号
	 * @author 刘新
	 */
	public function errorLog($file, $line, $content)
	{
		record_error_log($file, $line, $content, $this->user['userId'], $this->user['mobile']);
	/* 	if(is_object($content)) {
			$data['content'] = $content->getDbError() . '---' . $content->getError();
		} else {
			$data['content'] = $content;
		}
		$data['file'] = $file;
		$data['line'] = $line;
		$data['controller'] = CONTROLLER_NAME;
		$data['action'] = ACTION_NAME;
		$data['module'] = MODULE_NAME;
		$data['api_code']	= API_CODE;	
		$data['user_id'] = $this->user['userId'];
		$data['mobile'] = M('User')->where(array('id'=>$data['user_id']))->getField('mobile');
		return D('ErrorLog')->addErrorLog($data); */
	}

	/**
	 * 处理操作后返回的数据
	 * @param array $data
	 * @param string $info
	 * @return array
	 * @author 刘新
	 */
	public function successResult($data, $info = '')
	{
		$return = array('error' => 0, 'info' => '');
		//有数据
		if($data) {
			if($info) {
				$return['info'] = $info;
			} else {
				$return['info'] = $data;
			}
		//无数据
		} else {
			$return['info'] = array();
		}

		return $return;
	}
	
	/**
	 * 处理操作后返回的数据
	 * @param array $data
	 * @param string $info 查询成功且有数据时的提示信息
	 * @return array
	 * @author 刘新
	 */
	public function result($data, $info = '')
	{
		if($data === false) return 	array('error' => 1, 'info' => '查询失败');
		return $this->successResult($data, $info);
	}
}